package main

import (
	"fmt"
	"time"
)

func makeFood(c chan string) {
	foods := []string{"豆腐", "青菜", "白菜"}
	for _, food := range foods {
		c <- food
		time.Sleep(time.Second)
	}
	close(c) //告诉消费者，我生产完毕了，如果没有close操作，管道另外一头的goroutine就会一直等待，发生
	//fatal error: all goroutines are asleep - deadlock! 的错误
	//但是死锁是针对main线程发生的，下面开了一个协程来当消费者，所以不会发生死锁
}

func main() {
	c := make(chan string)
	go makeFood(c)

	go func() {
		//range channelName 的操作，会循环等待channel另一头生产者的生产，如果没有接收到channel close的指令，就会一直等待
		for food := range c {
			fmt.Println(food)
		}
		fmt.Println("chan 关闭了")
	}()

	for {
		fmt.Println("main线程不断运行")
		time.Sleep(time.Second * 3)
	}
}
